"""
网络爬虫模块 - 从网络获取古文数据
"""

import requests
from bs4 import BeautifulSoup
import re
import time

class 古文爬虫:
    def __init__(self):
        self.头部 = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
    
    def 获取古诗文网数据(self, 网址):
        """从古诗文网获取数据"""
        try:
            响应 = requests.get(网址, headers=self.头部)
            响应.encoding = 'utf-8'
            
            if 响应.status_code == 200:
                soup = BeautifulSoup(响应.text, 'html.parser')
                
                # 提取标题
                标题元素 = soup.find('h1')
                标题 = 标题元素.text.strip() if 标题元素 else "未知"
                
                # 提取作者和朝代
                作者朝代元素 = soup.find('p', class_='source')
                if 作者朝代元素:
                    作者朝代文本 = 作者朝代元素.text.strip()
                    作者朝代匹配 = re.search(r'〔(.*?)〕(.*)', 作者朝代文本)
                    if 作者朝代匹配:
                        朝代, 作者 = 作者朝代匹配.groups()
                    else:
                        朝代, 作者 = None, None
                else:
                    朝代, 作者 = None, None
                
                # 提取内容
                内容元素 = soup.find('div', class_='contson')
                内容 = 内容元素.text.strip() if 内容元素 else ""
                
                return {
                    "标题": 标题,
                    "作者": 作者,
                    "朝代": 朝代,
                    "内容": 内容,
                    "来源": 网址
                }
            else:
                print(f"❌ 请求失败，状态码: {响应.status_code}")
                return None
                
        except Exception as e:
            print(f"❌ 爬取数据失败: {e}")
            return None
    
    def 批量爬取(self, 网址列表):
        """批量爬取多个网址"""
        结果列表 = []
        for 网址 in 网址列表:
            print(f"正在爬取: {网址}")
            数据 = self.获取古诗文网数据(网址)
            if 数据:
                结果列表.append(数据)
            time.sleep(1)  # 避免请求过于频繁
        
        return 结果列表

# 示例用法
if __name__ == "__main__":
    爬虫 = 古文爬虫()
    
    # 示例网址列表
    网址列表 = [
        "https://www.gushiwen.cn/shiwenv_45c66c2f3c3b.aspx",  # 静夜思
        "https://www.gushiwen.cn/shiwenv_45c66c2f3c3b.aspx",  # 登鹳雀楼
    ]
    
    结果 = 爬虫.批量爬取(网址列表)
    for 数据 in 结果:
        print(f"标题: {数据['标题']}")
        print(f"作者: {数据['作者']}")
        print(f"朝代: {数据['朝代']}")
        print(f"内容: {数据['内容']}")
        print("-" * 50)